﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace OWLServer.owl.tipos
{
    /// <summary>
    /// Clase que representa una propiedad de dato asignada a un individuo en una ontología.
    /// </summary>
    public class PropiedadDatoIndividuo : PropiedadIndividuo, IEquatable<PropiedadDatoIndividuo>
    {
        private Propiedad propiedadDato;
        private String valor;

        /// <summary>
        /// Propiedad de tipo Dato
        /// </summary>
        public virtual Propiedad PropiedadDato
        {
            get { return propiedadDato; }
            set { propiedadDato = value; }
        }

        /// <summary>
        /// Valor de la propiedad
        /// </summary>
        public virtual String Valor
        {
            get { return valor; }
            set { valor = value; }
        }

        public PropiedadDatoIndividuo() { }

        public PropiedadDatoIndividuo(String valor, Propiedad propiedad)
        {
            Valor = valor;
            PropiedadDato = propiedad;
            Negada = false;
        }

        public PropiedadDatoIndividuo(String valor, Propiedad propiedad, bool negada)
            : base (negada)
        {
            Valor = valor;
            PropiedadDato = propiedad;
        }

        /// <summary>
        /// Método ToString()
        /// </summary>
        /// <returns></returns>
        override public String ToString()
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(this.PropiedadDato);
            sb.Append(": ");
            sb.Append(this.Valor);
            if (Negada) 
            {
                sb.Append(" (NEGADA)");
            }

            return sb.ToString();
        }

        #region Miembros de IEquatable<PropiedadDatoIndividuo>

        public bool Equals(PropiedadDatoIndividuo other)
        {
            return Valor.Equals(other.Valor) && PropiedadDato.Equals(other.PropiedadDato);
        }

        #endregion
    }
}
